﻿// LZWCode.h: interface for the LZWCode class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_LZWCODE_H__DBBA2F69_97D1_40E3_9C74_C530E62D39FA__INCLUDED_)
#define AFX_LZWCODE_H__DBBA2F69_97D1_40E3_9C74_C530E62D39FA__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/*该类实现在了lzw编码算法，在实现过程序中使用链表定义编译表，而不是固定大小
  hash表，可能效率不会太好，但容易实现和理解，对于一般要求已经足够了*/

//定义编译表结构
typedef	struct dic
		{
			char *string;
			unsigned short index;
		}table;

class LZWCode  
{
public:
	unsigned int GetTabLen(void);
	void DeCompress(FILE *inf,FILE *outf);
	void Compress(FILE *inf,FILE *outf);
	unsigned IsInTable(char *str);
	char* IsInTable(unsigned short);
	bool AddToTable(char* str);
	void InitCompTable();	
	LZWCode();
	virtual ~LZWCode();

private:
	unsigned int m_TabLen;
	unsigned int m_CurTabSize;
	table m_Tab[4096];
};

#endif // !defined(AFX_LZWCODE_H__DBBA2F69_97D1_40E3_9C74_C530E62D39FA__INCLUDED_)
